package com.clps.dev.sms.common.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
/**
 * 
 * ClassName: IBaseDao 
 * Description: 通用dao
 *
 * @author Jack.Huang
 * @version V1.0
 * @since JDK 1.8
   @date:2018-11-27 16:36:38
 */
public interface IBaseDao<T> {
	/**
	 * 
	 * save
	 * @Description:添加数据
	 * @param t 泛型
	 * @return int  返回0或1  0代表添加失败
	 * 						  1代表添加成功
	 */
	int save(T t);
	/**
	 * 
	 * delete
	 * @Description:删除数据
	 * @param id  id号
	 * @return:int		返回0或1		0代表删除失败
	 * 								1代表删除成功
	 */
	int deleteById(Serializable id);
	/**
	 * 
	 * update
	 * @Description:更新数据
	 * @param t 泛型,id  id号
	 * @return:int		返回0或1		0代表更新失败
	 * 								1代表更新成功
	 */
	int update(T t,Serializable id);
	/**
	 * 
	 * queryById
	 * @Description:通过id查询数据
	 * @param id  id号
	 * @return:T  返回对象
	 */
	T queryById(Serializable id);
	/**
	 * 
	 * queryALl
	 * @Description:查询全部数据
	 * @return:List<T>  
	 */
	List<T> queryALl();
	/**
	 * 
	 * findCount
	 * @Description:统计数据量
	 * @param detachedCriteria
	 * @return:Integer   数据量
	 */
	Integer findCount();
	Integer findCount(DetachedCriteria detachedCriteria);
	/**
	 * 
	 * findByPage
	 * @Description:分页查询
	 * @param detachedCriteria
	 * @param Integer begin 起始页
	 * @param Integer pageSize 每页的记录数
	 * @return:List<T>
	 */
	List<T> findByPage(Integer begin,Integer pageSize);
	/**
	 * 
	 * findByPageOrderByName
	 * @Description:按名称进行排序并分页查询
	 * @param detachedCriteria
	 * @param Integer begin 起始页
	 * @param Integer pageSize 每页的记录数
	 * @param String name 排序的名称
	 * @return:List<T>
	 */
	List<T> findByPageOrderByName(Integer begin,Integer pageSize,String name);
	/**
	 * 
	 * findByPageOrderByTime
	 * @Description:按创建时间进行排序并分页查询
	 * @param DetachedCriteria detachedCriteria
	 * @param Integer begin 起始页
	 * @param Integer pageSize 每页的记录数
	 * @param String Time 排序的名称
	 * @return:List<T>
	 */
	List<T> findByPageOrderByTime(Integer begin,Integer pageSize,String time);
}
